/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sys.dao;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import sys.bean.MovimentacaoBean;
import sys.bean.PedidoBean;
import sys.bean.ProdutoBean;
import sys.bean.UsuarioBean;
import sys.utils.ConexaoADS;
import static sys.utils.Utils.dataCorreta;

/**
 *
 * @author Cesar Daniel
 */
public class MovimentacaoDao {

    /*
     total do valor do vale (venda) - utilizado para rentabilidade
     */
    public static List<MovimentacaoBean> totalCustoVale(String dataInicial, String dataFinal, String vendedor) throws SQLException, IOException {
        List<MovimentacaoBean> lista = new ArrayList<>();
        Connection con = ConexaoADS.getConection();

        String sql = "SELECT C04NOME, SUM(C08CUSTO*C08QTDPRO) AS CUSTO \n"
                + "FROM SPAC08 \n"
                + "JOIN SPAC28 ON (C08NRDOC = C28PEDDEV) \n"
                + "JOIN SPAC04 ON (C08CVEND = C04CODIGO) \n"
                + "WHERE C28DTEMIS BETWEEN '"+dataInicial+"' AND '"+dataFinal+"' AND C28PEDDEV <> '' \n"
                + "AND C08CVEND LIKE '%"+vendedor+"%' \n"
                + "GROUP BY 1";
   
        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {

            MovimentacaoBean mov = new MovimentacaoBean();
            UsuarioBean usuario = new UsuarioBean();
            usuario.setNome(rs.getString("C04NOME"));

            mov.setUsuario(usuario);

            mov.setValor(rs.getDouble("CUSTO"));

            lista.add(mov);
        }

        stmt.close();
        con.close();

        return lista;
    }

    /*
     retornando dados dos produtos que contem no vale mercadoria
     */
    public static List<MovimentacaoBean> produtosValeMercadoria(String pedidoOrigemDevolucao) throws SQLException, IOException {

        Connection con = ConexaoADS.getConection();
        List<MovimentacaoBean> listaMov = new ArrayList<>();

        String sql = "SELECT C01CODIGO, C01DESC, C08QTDPRO, C08PRC \n"
                + "FROM SPAC08 \n"
                + "INNER JOIN SPAC28 ON (C08NRDOC = C28PEDDEV) \n"
                + "INNER JOIN SPAC01 ON (C01CODIGO = C08CODPRO) \n"
                + "WHERE C28PEDDEV = '" + pedidoOrigemDevolucao + "'";

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {

            MovimentacaoBean mov = new MovimentacaoBean();
            ProdutoBean produto = new ProdutoBean();
            produto.setCodigo(rs.getString("C01CODIGO"));
            produto.setDescricao(rs.getString("C01DESC"));
            mov.setProduto(produto);

            mov.setQuantidade(rs.getDouble("C08QTDPRO"));
            mov.setValor(rs.getDouble("C08PRC"));

            listaMov.add(mov);

        }
        stmt.close();
        con.close();

        return listaMov;

    }

    /*
     totalizando venda por vendedor, período, grupo e subgrupo - Sintetico, detalhado mostrando os produtos
     */
    public static List<MovimentacaoBean> vendaGrupoSubGrupoSintetico(String dataInicial, String dataFinal, String vendedor, String grupo, String subgrupo) throws SQLException, IOException {
        List<MovimentacaoBean> listaVendas = new ArrayList<>();
        Connection con = ConexaoADS.getConection();

        String sql = "SELECT C13DATA, C13NPED, C04NOME, C01CODIGO, C01DESC, C14QTD, C14VRUNIT \n"
                + "FROM SPAC01 \n"
                + "INNER JOIN SPAC14 ON (C01CODIGO = C14PROD) \n"
                + "INNER JOIN SPAC13 ON (C14NPED = C13NPED) \n"
                + "INNER JOIN SPAC04 ON (C04CODIGO = C13VEND) \n"
                + "WHERE \n"
                + "C13TIPO = 'P' \n"
                + "AND C13SITU = '' \n"
                + "AND C01GRUPO LIKE '%" + grupo + "%' \n"
                + "AND C01SUB LIKE '%" + subgrupo + "%' \n"
                + "AND C04CODIGO LIKE '%" + vendedor + "%' \n"
                + "AND C13DATA BETWEEN '" + dataInicial + "' AND '" + dataFinal + "' \n";

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
        while (rs.next()) {

            MovimentacaoBean movimentacao = new MovimentacaoBean();

            PedidoBean pedido = new PedidoBean();
            pedido.setData(dataCorreta(rs.getString("C13DATA")));
            pedido.setPedido(rs.getString("C13NPED"));

            UsuarioBean usuario = new UsuarioBean();
            usuario.setNome(rs.getString("C04NOME"));
            movimentacao.setUsuario(usuario);

            ProdutoBean produto = new ProdutoBean();
            produto.setCodigo(rs.getString("C01CODIGO"));
            produto.setDescricao(rs.getString("C01DESC"));

            movimentacao.setProduto(produto);
            movimentacao.setPedido(pedido);

            movimentacao.setQuantidade(rs.getDouble("C14QTD"));
            movimentacao.setValor(rs.getDouble("C14VRUNIT"));

            listaVendas.add(movimentacao);
        }

        stmt.close();
        con.close();

        return listaVendas;
    }

    /*
     alterando vendedor
     */
    public static void alterarVendedor(UsuarioBean usuario, String pedido) throws SQLException, IOException {

        Connection con = ConexaoADS.getConection();

        String sql = "UPDATE SPAC08 SET C08CVEND = ? \n"
                + "WHERE C08NRDOC = ?";

        PreparedStatement stmt = con.prepareStatement(sql);

        stmt.setString(1, usuario.getCodigo());
        stmt.setString(2, pedido);

        stmt.execute();

        stmt.close();
        con.close();

    }

    /*
     produtos referente ao vale mercadoria através do pedido
     */
    public static List<MovimentacaoBean> listaProdutosPedido(String pedOrigem, String data) throws SQLException, IOException {

        List<MovimentacaoBean> listaProdutos = new ArrayList<>();

        Connection con = ConexaoADS.getConection();

        String sql = "SELECT C01CODIGO, C01DESC, C08QTDPRO, C08PRC \n"
                + "FROM SPAC08 \n"
                + "INNER JOIN SPAC28 ON (C08NRDOC = C28PEDDEV) \n"
                + "INNER JOIN SPAC01 ON (C01CODIGO = C08CODPRO) \n"
                + "INNER JOIN SPAC13 ON (C08NRDOC = C13NPED) "
                + "WHERE "
                + "C08DTMOV = '" + data + "' \n"
                + "AND C08TIPO = '14' \n"
                + "AND C13SITU <> 'C' \n"
                + "AND C28PEDORI = '" + pedOrigem + "'";

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {
            MovimentacaoBean movimentacao = new MovimentacaoBean();

            ProdutoBean produto = new ProdutoBean();
            produto.setCodigo(rs.getString("C01CODIGO"));
            produto.setDescricao(rs.getString("C01DESC"));

            movimentacao.setProduto(produto);

            movimentacao.setQuantidade(rs.getDouble("C08QTDPRO"));
            movimentacao.setValor(rs.getDouble("C08PRC"));

            listaProdutos.add(movimentacao);

        }

        stmt.close();
        con.close();

        return listaProdutos;
    }

    /*
     produtos referente ao vale mercadoria através da data e cliente
     */
    public static List<MovimentacaoBean> listaProdutos(String data, String cliente) throws SQLException, IOException {

        List<MovimentacaoBean> listaProdutos = new ArrayList<>();

        Connection con = ConexaoADS.getConection();

        String sql = "SELECT C01CODIGO, C01DESC, C08QTDPRO, C08PRC \n"
                + "FROM SPAC08 \n"
                + "INNER JOIN SPAC01 ON (C01CODIGO = C08CODPRO) \n"
                + "INNER JOIN SPAC13 ON (C08NRDOC = C13NPED) \n"
                + "INNER JOIN SPAC05 ON (C05CODIGO = C13CLIE) \n"
                + "AND C08TIPO = '14' \n"
                + "AND C13SITU <> 'C' \n"
                + "AND C08DTMOV = '" + data + "' \n"
                + "AND C05CODIGO = '" + cliente + "'";

        PreparedStatement stmt = con.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        while (rs.next()) {
            MovimentacaoBean movimentacao = new MovimentacaoBean();

            ProdutoBean produto = new ProdutoBean();
            produto.setCodigo(rs.getString("C01CODIGO"));
            produto.setDescricao(rs.getString("C01DESC"));

            movimentacao.setProduto(produto);

            movimentacao.setQuantidade(rs.getDouble("C08QTDPRO"));
            movimentacao.setValor(rs.getDouble("C08PRC"));

            listaProdutos.add(movimentacao);

        }

        stmt.close();
        con.close();

        return listaProdutos;
    }

}
